/**
 * \file:   liste_produit.c
 * \author Ade
 * \author Morgane
 * \author Heni
 * \author Ousmane
 * \brief Interface pour les fonctions de manipulation complexe de produits.
 *
 * Fournit une fonction d'ajout de produit en fin de liste et de
 * lecture d'une liste de produits a partir d'un fichier.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "liste_produit.h"
#include "produit.h"
#include "typesprimitifs.h"
#include "categorie.h"

BOOLEEN ajoutFin(POINTEUR_LISTE_PRODUIT liste, POINTEUR_PRODUIT prod) {
    POINTEUR_LISTE_PRODUIT plp;
    POINTEUR_LISTE_PRODUIT temp = liste;

    if (liste == NULL || prod == NULL)
        return faux;
        /* on parcourt la liste a l'aide d'un pointeur temporaire et on
         *  indique que le dernier element de la liste est relie au
         *  nouvel element
         */
    else {
        while (temp != NULL && temp->pproduit != NULL && temp->suivant != NULL) {
            temp = temp->suivant;
        }
        if (temp->pproduit == NULL) {
            temp->pproduit = prod;
        } else {
            plp = malloc(sizeof (*plp));
            plp->pproduit = prod;
            /* On ajoute a la fin, donc aucun element ne va suivre */
            temp->suivant = plp;
            plp->suivant = NULL;
        }
        return vrai;
    }
}

/** Fonction qui va recuperer les donnees dans un fichier .txt et faire appel
 * a la fonction de remplissage d'une liste chainee
 */

ENTIER recupdonnee(CHAINE nomfile, POINTEUR_LISTE_PRODUIT list) {
    FILE* fichier;
    /* on declare un pointeur_produit p pour y ajouter les
     * differents elements de chaque produit
     */
    POINTEUR_PRODUIT p;
    /* on copiera le type du produit dans cette variable */
    CHAINE t;
    CHAINE line;
    BOOLEEN ajout;
    ENTIER_POSITIF args_assigned = 0;
    ENTIER nbr_lignes = 0;

    fichier = fopen(nomfile, "r");
    /* si le fichier n'a pas ete bien ouvert on affiche erreur*/
    if (!fichier) {
        printf("erreur recupdonnee \n");
    } else {

        while (fgets(line, MAX_CHAR, fichier) != NULL) {
            p = malloc(sizeof (*p));
            args_assigned = sscanf(line, "%s %u %lf %s %u ", &p->nom[0], &p->ID,
                    &p->prix_u, &t[0],
                    &p->quantite_disponible
                    );
            p->categorie = donner_categorie(t);
            if (args_assigned != 5) {
                free(p);
                continue;
            }
            nbr_lignes++;
            ajout = ajoutFin(list, p);
        }
        fclose(fichier);
    }
    return nbr_lignes;
}
